package vue.affectation;

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.Vector;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.TitledBorder;
import metier.AffectEleve;
import metier.Affectation;
import metier.Eleve;
import metier.Grade;
import metier.Stage;
import vue.commun.JPanJTable;
import vue.commun.JPanRechercherEleve;
import vue.eleve.RechercherEleve;
import configuration.MessageAppli;
import ctr.affectation.GestModifAffectation;
import ctr.commun.CommunGest;

public class JPanModifAffectation extends RechercherEleve{
	private static final long serialVersionUID = 1L;
	private JTextField jTFNomEleve, jTFPrenomEleve;
	private JTextField jTFRechercheNomEleve, jTFRecherchePrenomEleve, jTFDateDebutAff, jTFDateFinAff;
	private JComboBox jCBGradeEleve, jCBAffectation;
	private JComboBox jCBStage, jCBRechercheEleve;
	private JTextField jTFDateNaissanceEleve;
	private String titre;
	private Eleve eleve=null;
	private JButton boutModifAffectation;
	private JPanJTable panJTable;
	ArrayList<AffectEleve> listeAffectEleve=null;
	ArrayList<Affectation> listeAffectation=null;
	private AffectEleve affectEleveSel = null;
	private Affectation affectSel = null;

	public JPanModifAffectation(JPanModifAffectation jPanModifAffectation) {
		this.eleve = jPanModifAffectation.getEleve();
		this.affectEleveSel=jPanModifAffectation.getAffectEleveSel();
		afficher();
	}
	
	public JPanModifAffectation(String titre) {
		this.titre = titre;
		afficher();
	}
	
	/**
	 * Constructeur de base.
	 * Integration du panel rechercher
	 * @param titre
	 */
	public void afficher() {
		// Instanciation pour recuperer les objets en bases.
		// Oblige a passer par la couche controle pour acceder aux metiers.
		CommunGest communGest = new CommunGest();
		
		// Recuperation de la liste des stages.
		ArrayList<Stage> lStage = communGest.getListeStage();
		
		if ( !lStage.isEmpty())
		{
			//Creation du pannel de saisie pour la recherche
			JPanRechercherEleve jPanRechercherEleve = new JPanRechercherEleve(this);
			
			//Ajout du panel de recherche dans le panel Modifier eleve
			this.setLayout(new BorderLayout(2,1));
			this.add(jPanRechercherEleve, BorderLayout.NORTH);
			
			if(this.eleve!=null)
			{				
				// Ajout du panel de modification.
				this.add(partieModif(), BorderLayout.CENTER);
			}
		}
		else
		{
			JOptionPane.showMessageDialog(this, MessageAppli.MSG_STAGE_AUCUN_STAGE + ", ajout d'eleve impossible.", MessageAppli.MSG_ERREUR_TITRE, JOptionPane.WARNING_MESSAGE);
		}
	}
	
	/**
	 * Partie modification
	 * @param lStage
	 * @return
	 */
	private JPanel partieModif(){
		CommunGest communGest = new CommunGest();
		
		this.listeAffectEleve = communGest.getListeAffectEleve(eleve.getIdEleve());
		this.listeAffectation = communGest.getListeAffectation();
		
		Grade grade = communGest.getGrade(eleve.getIdGrade());
		
		JPanel panModif = new JPanel(new GridLayout(2,1));
		panModif.setBorder(new TitledBorder("Modifier une affectation"));
		
		//Panneau dans lequel il y a l'élève selectionné et la liste d'affectation
		JPanel panMilieu = new JPanel(new GridLayout(2, 1));
		
		//Ligne 2 : la liste d'affectation
		JPanel panListeAffect = new JPanel();
			
		//Nom des colonnes
		Vector<Object> nomColonne= new Vector<Object>(Arrays.asList(new String[] {"Affectation", "Date de debut", "Date de fin"}));
		
		//Valeurs des lignes
		Vector<Vector<Object>> dataVector= new Vector<Vector<Object>>();
		
		//Recuperation  des eleves.
		if ( listeAffectEleve != null && !listeAffectEleve.isEmpty())
		{
			for (AffectEleve affectEleve : listeAffectEleve)
			{
				//Creation d'un vector par eleve.
				dataVector.add(affectEleve.getVector());
			}
		}
		
		String titre = "Affectations du : " + grade.getAbrev() + " " + eleve.getNomEleve() + " " + eleve.getPrenom();
		this.panJTable = new JPanJTable(titre, dataVector, nomColonne, null);
		panJTable.getJtable().setAutoCreateRowSorter(true);
		panJTable.getJtable().addMouseListener(new GestModifAffectation(this));
		
		panListeAffect.add(panJTable);
		
		//Ajout des 2 lignes au panneau du milieu
		//panMilieu.add(panEleveSel);
		panMilieu.add(panListeAffect);
		
		//Panneau dans lequel il y a l'affect sel, l'affichage des infos de la sélection a modif et le bouton
		
		JPanel panBas = new JPanel(new GridLayout(2, 1));
		
		//System.out.println(affectEleveSel.getIdAffect()+" "+affectEleveSel.getIdEleve());
		Date dateDebutAff = null;
		Date dateFinAff = null;
		if(this.affectEleveSel!=null)
		{
			this.affectSel = communGest.getAffectation(this.affectEleveSel.getIdAffect());
		
			dateDebutAff = affectEleveSel.getDateDebutAff();
			dateFinAff = affectEleveSel.getDateDebutAff();
			panBas.setBorder(new TitledBorder("Vous avez selectionné l'affectation : "+affectSel.getLibelleAffect()+" ("+dateDebutAff+"-"+dateFinAff+")"));
		}
	
		//Ligne 1 : l'affichage
		JPanel panInfosAffect = new JPanel(new GridLayout(1, 2));
		
		//Dans la ligne 1 il y a 2 colonnes partie label et partie affichage des donnees
		//Colonne 1 : Label
		JPanel panLabel = new JPanel(new GridLayout(3, 1));
		
		JLabel jLAffectation = new JLabel("Nouvelle Affectation");
		JLabel jLDateDebutAff = new JLabel("Date de début");
		JLabel jLDateFinAff = new JLabel("Date de fin");
		
		//Ajout au panLabel des label
		panLabel.add(jLAffectation);
		panLabel.add(jLDateDebutAff);
		panLabel.add(jLDateFinAff);
		
		//Colonne 2 : Aff donnees
		JPanel panSaisi = new JPanel(new GridLayout(3, 1));
		
		this.jCBAffectation = new JComboBox(listeAffectation.toArray());
		
		this.jTFDateDebutAff = new JTextField(10);
		this.jTFDateFinAff = new JTextField(10);
		if (this.affectEleveSel!=null){
			SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd/MM/yyyy");
			this.jTFDateDebutAff.setText(simpleDateFormat.format(affectEleveSel.getDateDebutAff()));
			this.jTFDateFinAff.setText(simpleDateFormat.format(affectEleveSel.getDateFinAff()));
		}
		
		//Ajout au panSaisi des jtexts
		panSaisi.add(jCBAffectation);
		panSaisi.add(jTFDateDebutAff);
		panSaisi.add(jTFDateFinAff);
				
		//Ajout au panInfosAffect le panneau des labels et le panneau de saisi
		panInfosAffect.add(panLabel);
		panInfosAffect.add(panSaisi);
				
		//Ligne 2 : le bouton
		JPanel panBoutModif = new JPanel();
		
		this.boutModifAffectation = new JButton("Modifier");
		boutModifAffectation.addActionListener(new GestModifAffectation(this));
		
		//Ajout du bouton au panneau de bouton
		panBoutModif.add(boutModifAffectation);
				
		//Ajout au panneu du bas des panneaux infos et bouton
		panBas.add(panInfosAffect);
		panBas.add(panBoutModif);
		
		//Ajout des panneaux milieu et bas au panneau modif 
		panModif.add(panMilieu);
		panModif.add(panBas);
	
		return panModif;
	}

	public AffectEleve getAffectEleveSel() {
		return affectEleveSel;
	}
	
	public boolean setAffectEleveSel(AffectEleve uneAffectEleve) {
		this.affectEleveSel=uneAffectEleve;
		return this.affectEleveSel.equals(uneAffectEleve);
	}
	
	public ArrayList<AffectEleve> getListeAffectEleve() {
		return listeAffectEleve;
	}
	
	public JPanJTable getJPanJTable() {
		return this.panJTable;
	}
	public JTextField getJTFDateDebutAff() {
		return jTFDateDebutAff;
	}
	
	public JTextField getJTFDateFinAff() {
		return jTFDateFinAff;
	}
	
	public JComboBox getJCBStage() {
		return jCBStage;
	}
	
	public JComboBox getJCBGrade() {
		return jCBGradeEleve;
	}
	
	public JComboBox getJCBAffectation() {
		return jCBAffectation;
	}

	public JTextField getJTFNomEleve() {
		return jTFNomEleve;
	}

	public JTextField getJTFPrenomEleve() {
		return jTFPrenomEleve;
	}

	public JComboBox getCBGradeEleve() {
		return jCBGradeEleve;
	}

	public JTextField getJTFDateNaissanceEleve() {
		return jTFDateNaissanceEleve;
	}

	public JComboBox getCBStage() {
		return jCBStage;
	}

	public JTextField getJTFRechercheNomEleve() {
		return jTFRechercheNomEleve;
	}

	public JTextField getJTFRecherchePrenomEleve() {
		return jTFRecherchePrenomEleve;
	}

	public JComboBox getCBRechercheStage() {
		return jCBRechercheEleve;
	}

	public String getTitre() {
		return titre;
	}
	
	public JComboBox getCBAffectation() {
		return jCBAffectation;
	}

	@Override
	public Eleve getEleve() {
		return this.eleve;
	}

	@Override
	public void setEleve(Eleve eleve) {
		this.eleve = eleve;
		
	}
	
	@Override
	public JPanel init(){
		return new JPanModifAffectation(this);
	}
}